﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Dominio
{
    public class AdministracionHandler
    {
        private IDatos datos;
        private static AdministracionHandler instance = null;

        private AdministracionHandler()
        {

        }
        
        public void setDatosInstance(IDatos dat)
        {
            datos = dat;
        }

        public static AdministracionHandler getInstance()
        {
            if (instance == null)
            {
                instance = new AdministracionHandler();
            }
            return instance;

        }

        #region ABM USUARIOS
        
        public void registrarUsuario(BLUsuario u)
        {
            datos.registrarUsuario(u);
        }

        public void modificarUsuario(BLUsuario u)
        {
            datos.modificarUsuario(u);
        }

        public void bajaUsuario(BLUsuario u)
        {
            datos.eliminarCarrito(u);
            datos.bajaUsuario(u);
        }
        #endregion

        #region ABM Categorias

        public void altaCategoria(BLCategoria blc)
        {
            datos.altaCategoria(blc);
        }

        public void modificarCategoria(BLCategoria blc)
        {
            datos.modificarCategoria(blc);
        }

        public void bajaCategoria(BLCategoria blc)
        {
            datos.bajaCategoria(blc);
        }

        public BLCategoria getBLCategoria(int idCat)
        {
            return datos.getBLCategoria(idCat);
        }

        public List<BLCategoria> getBLCategorias()
        {
            try
            {
                return datos.getBLCategorias();
            }
            catch (Exception ex)
            {
                throw ex;
            }

        }


        #endregion

        #region Productos

        public void altaProducto(BLProducto blp)
        {
            try
            {
                datos.altaProducto(blp);
                FabricaIndexador.getIndexador().indexarProducto(blp);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public void modificarProducto(BLProducto blp)
        {
            try
            {
            datos.modificarProducto(blp);
            FabricaIndexador.getIndexador().reindexarProducto(blp);
            }
            catch (Exception ex)
            {
                throw ex;
            }

        }

        public void agregarVideo_Producto(int idProd, Byte[] video)
        {
            datos.agregarVideo_Producto(idProd, video);
        }

        public void eliminarVideo_Producto(int idProd)
        {
            datos.eliminarVideo_Producto(idProd);
        }

        public void bajaProducto(int idProd)
        {
            datos.bajaProducto(idProd);
        }

        public BLProducto getBLProducto(int id)
        {
            return datos.getBLProducto(id);
        }

        public List<BLProducto> getBLProductos()
        {
            return datos.getBLProductos();
        }

        public List<BLProducto> visualizarCatalogo(int idCat)
        {
            return datos.visualizarCatalogo(idCat);
        }

        #endregion

        public BLUsuario getUsuarioPorUserName(string userName1)
        {
            return datos.getUsuarioPorUserName(userName1);
        }

        public List<BLUsuario> getBLUsuarios()
        {
            try
            {
               return datos.getBLUsuarios();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
    }
}
